<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <script>
    // Array对象
    // 1 includes -返回true/flase
    console.log([1,2,3,4,5].includes(12))
    // 2 concat 把数组连接起来
    console.log([1,2,3].concat([4,5,2]));
    // 3 pop 移除最后一个元素并返回移除掉的元素
    console.log([1,2,3,0].pop())
    // 4 shift 移除第一个元素并返回移除掉的元素
    console.log([1,2,3,0].shift())
    // 5 slice 返回start 到end-1的元素
    console.log(['A','B','C','D'].slice(0,2))
    // 6 splice 删除index前面的数组，如果为负数从尾巴上删
    console.log(['A','B','C','D'].splice(-2))
    // start：表示需要操作的起始位置，即从数组的哪个位置开始进行操作；
    //deleteCount：表示需要删除的元素个数，如果为0，则不删除任何元素；
    //item1, item2, ...：表示需要插入到数组中的元素，可以是任意个。
    let fruits = ['apple', 'banana', 'orange', 'grape'];
    // fruits.splice(2, 2); 删除元素
    // fruits.splice(2, 0,'A','B') 插入元素
    //fruits.splice(2, 1,'A') 替换元素
    console.log(fruits); // ['apple', 'banana', 'grape']
    // 7 push  往数组中新添加一个元素，返回最新长度
    console.log(fruits.push('r'));
    // 8 sort 对数组进行升序排序 重写里面函数可以降序排列
    console.log([2,1,4,6,2].sort())
    console.log(['C','A','B'].sort())
    console.log([2,1,4,6,2].sort((a,b)=>{
      return b-a
    }))
    // 9 reverse 对数组进行反序
    console.log([2,1,4,6,2].reverse())
    // 10 toLocalString  把数组转换为本地字符串
    // console.log([2,1,4,6,2].toLocalString())
    // 11 reduce  pre cur index arr分别表示前一个值 当前值 当前索引 数组 两种写法
    //第一提供初始值 arr.reduce((pre cur index arr)=>{},initValue),pre是initvalue,cur是第一项，index是0
    //第二不提供初始值 arr.reduce((pre cur index arr)=>{}) pre是第一项,cur是第二项，index是1
    //reduce常用的方法 
    //1、累加
    
    let arr = [1,3,5,7,9]
    let sum = arr.reduce((pre,cur,index,arr)=>{
      console.log(`pre:${pre}  cur:${cur}  index:${index}`);
      return pre+cur
    })
    console.log('sum:',sum);
    //2、累乘
    let sumx = arr.reduce((pre,cur,index,arr)=>{
      console.log(`pre:${pre}  cur:${cur}  index:${index}`);
      return pre*cur
    })
    console.log('sumx:',sumx);
    //统计每个字符出现的个数 {Alice：2，Bob：1，Tiff：1，Bruce：1}
    let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    names=names.reduce((pre,cur)=>{
      if(cur in pre) {
        pre[cur]++
      }else{
        pre[cur]=1
      }
      return pre
    },{})
    console.log('names:',names);

    //3、数组去重
    let citys = ['A','B','C','B','D','A']
    citys = citys.reduce((pre,cur)=>{
      if(!pre.includes(cur)) {
        pre.push(cur)
      }
      return pre
    },[])
    console.log('citys:',citys);

    // 4、将二位数组转换成一维数组[[1,2,3],[3,5,1]] 转成[1,2,3,3,5,1]
    let erArr = [[1,2,3],[3,5,1]]
    erArr = erArr.reduce((pre,cur)=>{
      return pre.concat(cur)
    },[])
    console.log('erArr:',erArr);

    // 5、将属性进行分类
    let person = [
    {
        name: 'xiaoming',
        age: 18
    },{
        name: 'xiaohong',
        age: 17
    },{
        name: 'xiaogang',
        age: 17
    }
];
function groupBy(objectArray, property) {
  return objectArray.reduce(function (acc, obj) {
    var key = obj[property];
    if (!acc[key]) {
      acc[key] = [];
    }
    acc[key].push(obj);
    return acc;
  }, {});
}
let groupedPerson = groupBy(person, 'age');
console.log(groupedPerson);
  </script>
</body>
</html>